﻿// Copyright (c) 2015, Microsoft Corporation
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//

using Windows.ApplicationModel;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace MyLivingRoom.Views
{
    public abstract class BasePageView : Page
    {
        public BasePageView()
        {
            this.DataContext = null;
            if (!DesignMode.DesignModeEnabled)
            {
                this.DataContextChanged += (s, a) => this.UpdateBindings();
            }
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // Deserialize the navigation parameter
            var topicId = e.Parameter as string;
            if (topicId != null)
            {
                // Lookup the navigated-to view model
                var viewModel = App.Current.GetViewModelFromTopicId(topicId);
                this.DataContext = viewModel;
            }

            base.OnNavigatedTo(e);
        }

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            this.DataContext = null;
            base.OnNavigatedFrom(e);
        }

        protected abstract void UpdateBindings();
    }
}
